package com.f21.f21assessoria.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.faces.model.SelectItem;
import org.primefaces.model.DualListModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.primefaces.event.TransferEvent;

import com.f21.f21assessoria.adapter.AdapterSetEList;
import com.f21.f21assessoria.converter.ConverterPerfis;
import com.f21.f21assessoria.enums.DiasDaSemana;
import com.f21.f21assessoria.enums.Perfis;
import com.f21.f21assessoria.model.cadastro.Usuario;
import com.f21.f21assessoria.model.modalidade.Modalidade;
import com.f21.f21assessoria.model.modalidade.Turma;
import com.f21.f21assessoria.service.CrudServ;
import com.f21.f21assessoria.service.TurmaService;
import com.f21.f21assessoria.service.UsuarioService;
import com.f21.f21assessoria.util.JsfUtil;
import com.f21.f21assessoria.util.UtilMessage;

public class ModalidadeController implements Serializable {

	private static final long serialVersionUID = 1L;

	private DualListModel<Usuario> listaProfessores;

	private Modalidade modalidade;
	private Turma turma;
	@Autowired
	private TurmaService service;
	@Autowired
	private UsuarioService userService;

	public ModalidadeController() {
		Modalidade modalidade;
		// this.turma = new Turma();
		modalidade = (Modalidade) JsfUtil.getSessionValue("modalidade");

		if (modalidade == null)
			this.modalidade = new Modalidade();
		else {
			this.modalidade = modalidade;
			JsfUtil.removeFromSession("modalidade");
		}
	}

	public String salvar() {
		service.salvarModalidade(modalidade);
		String[] parm = { modalidade.getNome() };
		UtilMessage
				.addInfoMessageBundle("msg.form.info.modalidade.salvo", parm);
		return "listmodalidade";
	}

	public Modalidade getModalidade() {
		return modalidade;
	}

	public void setModalidade(Modalidade modalidade) {
		this.modalidade = modalidade;
	}

	public TurmaService getCrudServ() {
		return service;
	}

	public void setCrudServ(TurmaService service) {
		this.service = service;
	}

	public void novaTurma() {
		this.listaProfessores = new DualListModel<Usuario>(null, null);
		listaProfessores.setTarget(new ArrayList<Usuario>());
		listaProfessores.setSource(userService.listarProfessores());

		this.turma = new Turma();
	}

	public void addTurma() {
		service.addProfessor(listaProfessores.getTarget(), this.turma);
		modalidade.addTurma(this.turma);
		this.turma = null;
	}

	public void editarTurma() {
		this.listaProfessores = new DualListModel<Usuario>(null, null);
		List listProfTurma = AdapterSetEList.getList(service
				.getListaProfs(turma));
		listaProfessores.setTarget(listProfTurma);
		List<Usuario> listaTodosProf = userService.listarProfessores();
		boolean removeAll = listaTodosProf.removeAll(listProfTurma);
		listaProfessores.setSource(listaTodosProf);
	}

	public String[] getListTurnos() {
		String[] turnos = { Turma.MANHA, Turma.TARDE, Turma.NOITE };
		return turnos;
	}

	public SelectItem[] getListDiasSemanas() {
		return ConverterPerfis.getListaValores(DiasDaSemana.values());
	}

	public Turma getTurma() {
		return turma;
	}

	public void setTurma(Turma turma) {
		this.turma = turma;
	}

	public DualListModel<Usuario> getListaProfessores() {
		return listaProfessores;
	}

	public void setListaProfessores(DualListModel<Usuario> listaProfessores) {
		this.listaProfessores = listaProfessores;
	}

	public void onTransfer(TransferEvent event) {

	}
	
	public void excluirTurma(){
		service.removerTurma(modalidade, turma);
	}

	public List<Modalidade> getListaModalidades() {
		return service.listaModalidades();
	}

}
